# I2C显示图像和文字
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf
import font

WIDTH  = 128                                            # OLED像素长
HEIGHT = 64                                            # OLED像素宽

i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=200000)       # 初始化I2C（I2C编号，scl引脚号，sda引脚号，频率）  
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # 打印设备I2C地址
print("I2C Configuration: "+str(i2c))                   # 打印I2C 信息


oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # 初始化屏幕

# 树莓派LOGO 32x32 bytearray
buffer = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|?\x00\x01\x86@\x80\x01\x01\x80\x80\x01\x11\x88\x80\x01\x05\xa0\x80\x00\x83\xc1\x00\x00C\xe3\x00\x00~\xfc\x00\x00L'\x00\x00\x9c\x11\x00\x00\xbf\xfd\x00\x00\xe1\x87\x00\x01\xc1\x83\x80\x02A\x82@\x02A\x82@\x02\xc1\xc2@\x02\xf6>\xc0\x01\xfc=\x80\x01\x18\x18\x80\x01\x88\x10\x80\x00\x8c!\x00\x00\x87\xf1\x00\x00\x7f\xf6\x00\x008\x1c\x00\x00\x0c \x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

# 把树莓派LOGO图片存入缓存器钟 (图片大小是 32x32)
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)

#显示中文函数
def chinese(ch_str, x_axis, y_axis): 
   offset_ = 0 
   y_axis = y_axis*1  # 中文高度一行占16个，但是为了统一就改成1，所以可能存在叠加的情况。
   x_axis = (x_axis*1)  # 中文宽度占16个 
   for k in ch_str: 
       code = 0x00  # 将中文转成16进制编码 
       data_code = k.encode("utf-8") 
       code |= data_code[0] << 16 
       code |= data_code[1] << 8
       code |= data_code[2]
       byte_data = font.fonts[code]
       for y in range(0, 16):
           a_ = bin(byte_data[y]).replace('0b', '')
           while len(a_) < 8:
               a_ = '0'+a_
           b_ = bin(byte_data[y+16]).replace('0b', '')
           while len(b_) < 8:
               b_ = '0'+b_
           for x in range(0, 8):
               oled.pixel(x_axis+offset_+x, y+y_axis, int(a_[x]))   
               oled.pixel(x_axis+offset_+x+8, y+y_axis, int(b_[x]))   
       offset_ += 16

# 清空屏幕
oled.fill(0)

# 从缓存器中读取图片显示在屏幕中
oled.blit(fb, 96, 0)

# 加入一些文字
oled.text("Raspberry Pi",5,5)
oled.text("Pico",5,15)
chinese('树莓派',5,35)

# 更新屏幕显示
oled.show()
